<?php
/**
 * Created by PhpStorm.
 * User: lhl
 * Date: 2019/5/31
 * Time: 10:47
 * Features: 日志类
 */

namespace loger;

use think\facade\Config;
use think\facade\Env;

class Loger
{
    //配置信息
    private static $_config = [];

    /**
     * 写日志
     * @param  string  $log         写入日志内容
     * @param  string  $childDir    子目录
     * @param  bool    $time        是否写入时间
     *
     * @return bool
    */
    public static function write($log,$childDir = "", $time = true)
    {
        //读取配置
        self::$_config = Config::get('log.extend.loger',[
            //日志保存主目录
            'path' => Env::get('runtime_path') . 'loger',
        ]);

        $dir = rtrim(self::$_config['path'],'/').'/'.$childDir;
        //递归创建目录
        if (!self::createDir($dir)) {
            return false;
        }

        $utime = self::udate("Y-m-d H:i:s.u");
        $utime = "[".substr($utime,0,23)."]";
        $tim = date('Ymd');
        $h = intval(date('H'));
        if($h >= 0 && $h < 6){
            $tim .= '.am.1';
        }else if($h >= 6 && $h < 12){
            $tim .= '.am.2';
        }else if($h >= 12 && $h < 18){
            $tim .= '.pm.1';
        }else if($h >= 18 && $h < 24){
            $tim .= '.pm.2';
        }
        $file  = $dir.'/'.$tim.'.log';//要写入文件的文件名（可以是任意文件名），如果文件不存在，将会创建一个
        if ($time) {
            $content = $utime." ".$log.PHP_EOL;
        } else {
            $content = $log.PHP_EOL;
        }

        //追加写入日志
        if($f  = file_put_contents($file, $content,FILE_APPEND)){// 这个函数支持版本(PHP 5)
            return true;
        }else{
            return false;
        }
    }

    /**
     * 获取包含微秒的日期
     * @param string $format 日期格式
     * @param float $utimestamp 微秒时间戳
    */
    public static function udate($format = 'u', $utimestamp = null) {
        if (is_null($utimestamp))
            //当前时间
            $utimestamp = microtime(true);
        $timestamp = floor($utimestamp);
        $milliseconds = round(($utimestamp - $timestamp) * 1000000);
        return date(preg_replace('`(?<!\\\\)u`', $milliseconds, $format), $timestamp);
    }

    /**
     * 递归创建目录
     * @param string $path  目录路径
     * @return bool
     */
    public static function createDir($path){
        return  is_dir($path) or self::createDir(dirname($path)) and mkdir($path, 0777);
    }
}